package com.satoken.controller;

import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/user/")
public class UserController {

    // 测试登录，浏览器访问： http://localhost:8081/user/doLogin?username=zhang&password=123456
    @RequestMapping("doLogin")
    public String doLogin(String username, String password) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            return "登录成功";
        }
        return "登录失败";
    }

    // 查询登录状态，浏览器访问： http://localhost:8081/user/isLogin
    @RequestMapping("isLogin")
    public String isLogin() {
        return "当前会话是否登录：" + StpUtil.isLogin();
    }

    // 退出 http://localhost:8081/user/logout
    @GetMapping("/logout")
    public boolean logout(){
        StpUtil.logout();
        return true;
    }

    //// 检验当前会话是否已经登录, 如果未登录，则抛出异常：`NotLoginException`
    // http://localhost:8081/user/checkLogin
    @GetMapping("/checkLogin")
    public SaResult checkLogin(){

        try{
            StpUtil.checkLogin();
            return SaResult.ok("已经登录");
        }catch (NotLoginException e){
            e.printStackTrace();
            return SaResult.error("未登录");
        }
    }

    // 获取登录ID http://localhost:8081/user/getLoginId
    @GetMapping("/getLoginId")
    public Map<String,Object> getLoginId(){
        Map<String,Object> map = new HashMap<>();
        // 获取当前会话账号id, 如果未登录，则抛出异常：`NotLoginException`
        map.put("getLoginId",StpUtil.getLoginId());
        map.put("getLoginIdAsInt",StpUtil.getLoginIdAsInt());// 获取当前会话账号id, 并转化为`String`类型
        return map;
    }

    // token信息 http://localhost:8081/user/getToken
    @GetMapping("/getToken")
    public SaTokenInfo getToken(){
        return StpUtil.getTokenInfo();
    }

}
